package com.lihepeng.leecode.tree;

import org.junit.Test;

/**
 * 给你一棵所有节点为非负值的二叉搜索树，请你计算树中任意两节点的差的绝对值的最小值。
 * 示例：
 * 输入：
 * <p>
 * 1
 * \
 * 3
 * /
 * 2
 * 输出：
 * 1
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Solution530 {
    // 二叉搜索数
    // 中序遍历
    int ans;
    int pre;

    public int getMinimumDifference(TreeNode root) {
        ans = Integer.MAX_VALUE;
        pre = -1;
        inOrderTravel(root);
        return ans;
    }

    // 中序遍历
    private void inOrderTravel(TreeNode root) {
        if (root == null) {
            return;
        }
        inOrderTravel(root.left);
        // 判断里面的值 分别赋值 ans 和pre
        if (pre == -1) {
            pre = root.val;
        } else {
            ans = Math.min(ans, root.val - pre);
            pre = root.val;
        }

        inOrderTravel(root.right);
    }

    @Test
    public void runTest() {
        TreeNode head = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(3);
        head.right = node3;
        node3.left = node2;
        int minimumDifference = this.getMinimumDifference(head);
        System.out.println(minimumDifference);
    }
}
